PHP দিয়ে MySQL ডাটাবেস থেকে একাধিক row এবং column ফেচ করা অত্যন্ত সাধারণ এবং গুরুত্বপূর্ণ একটি কাজ। একাধিক রেকর্ড একসাথে ফেচ করতে SELECT কোয়েরি ব্যবহার করা হয়। এটি ডাটাবেসের থেকে প্রয়োজনীয় ডাটা একত্রে বের করতে সহায়তা করে।
এই গাইডে আমরা দেখব কীভাবে mysqli এবং PDO ব্যবহার করে একাধিক রো (row) এবং কলাম (column) ফেচ করা যায়।
1. mysqli ব্যবহার করে Multiple Rows এবং Columns Fetch করা
1.1 mysqli (প্রসিডিউরাল স্টাইল)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// ডাটাবেস সংযোগ
$conn = mysqli_connect($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// SELECT কোয়েরি
$sql = "SELECT id, name, email FROM users";
$result = mysqli_query($conn, $sql);
// একাধিক রেকর্ড ফেচ করা
if (mysqli_num_rows($result) > 0) {
// প্রতিটি রেকর্ড ফেচ করা
while($row = mysqli_fetch_assoc($result)) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "No results found";
}
// সংযোগ বন্ধ করা
mysqli_close($conn);
?>
1.2 mysqli (অবজেক্ট-ওরিয়েন্টেড স্টাইল)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// ডাটাবেস সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SELECT কোয়েরি
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);
// একাধিক রেকর্ড ফেচ করা
if ($result->num_rows > 0) {
// প্রতিটি রেকর্ড ফেচ করা
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "No results found";
}
// সংযোগ বন্ধ করা
$conn->close();
?>
2. PDO ব্যবহার করে Multiple Rows এবং Columns Fetch করা
PDO দিয়ে একাধিক রেকর্ড ফেচ করার জন্য fetchAll() মেথড ব্যবহার করা হয়, যা একসাথে সমস্ত রেকর্ড ফেচ করে। fetch() মেথডও ব্যবহার করা যায় একাধিক রেকর্ড প্রক্রিয়া করার জন্য।
2.1 PDO ব্যবহার করে Multiple Rows Fetch করা
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
try {
// PDO দিয়ে ডাটাবেস সংযোগ
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// PDO তে এরর হ্যান্ডলিং সেট করা
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SELECT কোয়েরি
$sql = "SELECT id, name, email FROM users";
$stmt = $conn->prepare($sql);
$stmt->execute();
// একাধিক রেকর্ড ফেচ করা
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($result) {
foreach ($result as $row) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "No results found";
}
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
// সংযোগ বন্ধ করা
$conn = null;
?>
2.2 PDO ব্যবহার করে fetch() মেথড দিয়ে Multiple Rows Fetch করা
fetch() মেথড একে একে রেকর্ড ফেচ করে, তাই লুপের মাধ্যমে একাধিক রেকর্ড প্রক্রিয়া করা হয়।
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
try {
// PDO দিয়ে ডাটাবেস সংযোগ
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// PDO তে এরর হ্যান্ডলিং সেট করা
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SELECT কোয়েরি
$sql = "SELECT id, name, email FROM users";
$stmt = $conn->prepare($sql);
$stmt->execute();
// একাধিক রেকর্ড ফেচ করা
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
// সংযোগ বন্ধ করা
$conn = null;
?>
3. ফেচের বিভিন্ন পদ্ধতি
MySQL থেকে একাধিক রো এবং কলাম ফেচ করার সময়, আপনি ফেচের বিভিন্ন পদ্ধতি ব্যবহার করতে পারেন, যেগুলোর মাধ্যমে ডাটা অ্যাক্সেসের পদ্ধতি ভিন্ন হয়।
3.1 fetch_assoc() (mysqli)
এটি একটি অ্যাসোসিয়েটিভ অ্যারে রিটার্ন করে, যেখানে কলাম নামের মাধ্যমে ডাটা অ্যাক্সেস করা যায়।
$row = mysqli_fetch_assoc($result);
echo $row['name']; // 'name' কলামের ডাটা
3.2 fetch_row() (mysqli)
এটি ইনডেক্স অ্যারে রিটার্ন করে, যেখানে কলামের ডাটা ইনডেক্সের মাধ্যমে অ্যাক্সেস করা যায়।
$row = mysqli_fetch_row($result);
echo $row[0]; // প্রথম কলামের ডাটা
3.3 fetch_object() (mysqli)
এটি একটি অবজেক্ট রিটার্ন করে, যেখানে কলাম নাম প্রপার্টি হিসেবে অ্যাক্সেস করা যায়।
$row = mysqli_fetch_object($result);
echo $row->name; // 'name' কলামের ডাটা
3.4 fetchAll() (PDO)
PDO তে fetchAll() মেথড ব্যবহার করে একসাথে সমস্ত রেকর্ড ফেচ করা যায়। এটি একাধিক রেকর্ড একই সাথে রিটার্ন করে।
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo $row['name'];
}
3.5 fetch() (PDO)
PDO তে fetch() মেথড একে একে রেকর্ড ফেচ করে। এটি ব্যবহারের সময়, প্রতিটি রেকর্ড লুপে ফেচ করা হয়।
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['name'];
}
4. Performance Optimization Tips
LIMIT ব্যবহার করুন: যখন বড় ডাটাবেস থেকে ডাটা রিট্রিভ করবেন, তখন LIMIT ব্যবহার করে ডাটা একসাথে না নিয়ে কিছু রেকর্ডই নিয়ে আসুন। এতে পারফরম্যান্স ভালো হয়।
উদাহরণ:
$sql = "SELECT id, name, email FROM users LIMIT 10";- Indexing ব্যবহার করুন: SELECT কোয়েরি আরও দ্রুত করার জন্য ডাটাবেসে সঠিকভাবে indexing ব্যবহার করুন।
- Prepared Statements ব্যবহার করুন: SQL ইনজেকশন থেকে রক্ষা পেতে এবং ডাটা নিরাপত্তা বাড়ানোর জন্য prepared statements ব্যবহার করুন।
সারাংশ
PHP দিয়ে MySQL ডাটাবেস থেকে একাধিক রো এবং কলাম ফেচ করতে mysqli এবং PDO দুইটি পদ্ধতি ব্যবহৃত হয়। যেখানে mysqli প্রসিডিউরাল এবং অবজেক্ট-ওরিয়েন্টেড স্টাইল সাপোর্ট করে, PDO একাধিক ডাটাবেস সিস্টেম সাপোর্ট করে এবং কোডের পোর্টেবিলিটি বাড়ায়। একাধিক রেকর্ড ফেচ করার সময় fetchAll() এবং fetch() পদ্ধতি ব্যবহৃত হয়। এর মাধ্যমে কোডের রিডেবিলিটি এবং কার্যকারিতা নিশ্চিত করা যায়।
Read more